package day16;

import java.util.ArrayList;
import java.util.List;

public abstract class AbstractCat {
    String name;
    //用户接受  猫状态改变的通知
    public abstract void update(String msg);
}

//观察者(主人类)
class Person extends AbstractCat {
    public Person(String name) {
        super.name = name;
    }
    public void update(String msg) {
        System.out.println(name+"接收到了通知"+msg);
    }
}

//被观察者  猫主题
interface CatTopic {
    void add(AbstractCat cat);
    void remove(AbstractCat user);
    void update(String msg);
}

class Cat implements CatTopic {
    private List<AbstractCat> list = new ArrayList<>();
    public void add(AbstractCat user) {
        list.add(user);
        System.out.println(user.name+"添加关注");
    }
    public void remove(AbstractCat user) {
        list.remove(user);
        System.out.println(user.name+"取消关注");
    }
    public void update(String msg) {
        System.out.println("猫猫状态改变了"+msg);
        for (AbstractCat cat : list) {
            cat.update(msg);
        }
    }

    public static void main(String[] args) {
        Cat cat = new Cat();
        AbstractCat user1 = new Person("WAN1");
        AbstractCat user2 = new Person("WAN2");
        AbstractCat user3 = new Person("WAN3");
        cat.add(user1);
        cat.add(user2);
        cat.add(user3);
        cat.update("开学了");
        cat.remove(user2);
        cat.update("生气了");
    }
}
